/*Esta es una clase de patron Singleton*/

package gestoresPasajeros;

import Control.EntityMan;
import Control.NacionalidadJpaController;
import Control.OcupacionJpaController;
import Control.PosicionFrenteIvaJpaController;
import Control.TipoDocumentoJpaController;
import Entidades.Nacionalidad;
import Entidades.Ocupacion;
import Entidades.PosicionFrenteIva;
import Entidades.TipoDocumento;
import java.util.ArrayList;
import java.util.List;

public class NomencladorDatosPersonales {
    
    private List<TipoDocumento> listadoTipoDni;
    private List<PosicionFrenteIva> listadoPosicionesIVA;
    private List<Ocupacion> listadoOcupacion;
     private List<Nacionalidad> listadoNacionalidad;
    
    private static NomencladorDatosPersonales unSingleton=new NomencladorDatosPersonales ();
    private NomencladorDatosPersonales (){
        inicializar();
        
        
        
    }
    public static NomencladorDatosPersonales getInstance(){
    return unSingleton;}
    
       /*metodo inicializador*/
     
      private void inicializar(){
          listadoTipoDni=obtenerTipoDni();
          listadoPosicionesIVA=obtenerPosicionesIVA();
          listadoOcupacion=obtenerOcupaciones();
          listadoNacionalidad=obtenerNacionalidades();
      } 
      
    /*metodos que obtienen los objetos de la BD*/
         private List <TipoDocumento> obtenerTipoDni(){
        TipoDocumentoJpaController t= new TipoDocumentoJpaController(EntityMan.getInstance());
        List<TipoDocumento> returno= new ArrayList<>();
                for (TipoDocumento unTipo:  t.findTipoDocumentoEntities()){
                    returno.add(unTipo);
                    
                }
                return returno;
     }
        private List <PosicionFrenteIva> obtenerPosicionesIVA(){
        PosicionFrenteIvaJpaController t= new PosicionFrenteIvaJpaController(EntityMan.getInstance());
        List<PosicionFrenteIva> returno= new ArrayList<>();
                for (PosicionFrenteIva unaPosicion:  t.findPosicionFrenteIvaEntities()){
                    returno.add(unaPosicion);
                    
                }
                return returno;
     }
         private List <Ocupacion> obtenerOcupaciones(){
        OcupacionJpaController t= new  OcupacionJpaController(EntityMan.getInstance());
        List<Ocupacion> returno= new ArrayList<>();
                for ( Ocupacion unaOcup:  t.findOcupacionEntities()){
                    returno.add(unaOcup);
                    
                }
                return returno;
     }
            
     private List <Nacionalidad> obtenerNacionalidades(){
        NacionalidadJpaController t= new  NacionalidadJpaController(EntityMan.getInstance());
        List<Nacionalidad> returno= new ArrayList<>();
                for ( Nacionalidad unaNacionalidad:  t.findNacionalidadEntities()){
                    returno.add(unaNacionalidad);
                    
                }
                return returno;
     }
         
        /*metodos nomencladores de Objetos*/
     public List<TipoDocumento> getObjetosTipoDNI() {
     return listadoTipoDni;}
     public List<Ocupacion> getObjetosOcupacion() {
     return listadoOcupacion;}
     public List<Nacionalidad> getObjetosNacionalidad() {
     return listadoNacionalidad;}
     public List<PosicionFrenteIva> getObjetosPosicionFrenteIva() {
     return listadoPosicionesIVA;}
     
     
    /*metodos nomencladores de String para COMBOBOX*/
    public List<String> getListadoTipoDni(){
        List <String> r=new ArrayList();
    
         for ( TipoDocumento unTipo: listadoTipoDni ){
                    r.add(unTipo.getDescripcion());}
         return r;
    }
   public List<String> getListadoNacionalidades(){
        List <String> r=new ArrayList();
    
         for ( Nacionalidad unaNac: listadoNacionalidad ){
                    r.add(unaNac.getDescropcion());}
         return r;
    }
   
    public List<String> getListadoPosicionesIVA(){
        List <String> r=new ArrayList();
    
         for ( PosicionFrenteIva unaPos: listadoPosicionesIVA){
                    r.add(unaPos.getDescripcion());}
         return r;
    }
    public List<String> getListadoOcupacion(){
        List <String> r=new ArrayList();
    
         for ( Ocupacion unaOcup: listadoOcupacion ){
                    r.add(unaOcup.getDescripcion());}
         return r;
    } 
    
    //metodos que retornan la instancia del objeto a partir de su string descripcion
    public TipoDocumento getTipoDocumento(String unTipo){
        for( TipoDocumento tipo: listadoTipoDni){
        if(tipo.getDescripcion().equals(unTipo)){
            return tipo;
        }     
    }
    return null;}
    
       public PosicionFrenteIva getPosicionFrenteIva(String unaPos){
        for( PosicionFrenteIva pos: listadoPosicionesIVA){
        if(pos.getDescripcion().equals(unaPos)){
            return pos;
        }     
    }
    return null;}
       
          public Nacionalidad getNacionalidad(String unaNac){
        for( Nacionalidad nac: listadoNacionalidad){
        if(nac.getDescropcion().equals(unaNac)){
            return nac;
        }     
    }
    return null;}
          
        public Ocupacion getOcupacion(String unaOcup){
            for( Ocupacion ocup: listadoOcupacion){
                if(ocup.getDescripcion().equals(unaOcup)){
                return ocup;
        }     
    }
    return null;}
}

